package com.ruoyi.user.mapper;

import com.ruoyi.user.domain.CouponTemplate;
import com.ruoyi.user.domain.UserCoupon;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface UserCouponMapper {

    // 基本CRUD
    UserCoupon selectUserCouponById(Long userCouponId);

    List<UserCoupon> selectUserCouponList(UserCoupon userCoupon);

    int insertUserCoupon(UserCoupon userCoupon);

    int updateUserCoupon(UserCoupon userCoupon);

    int deleteUserCouponById(Long userCouponId);

    int deleteUserCouponByIds(Long[] userCouponIds);

    // 级联：模板元信息查询
    CouponTemplate selectCouponTemplateMeta(@Param("couponId") Long couponId);

    // 级联：统计已分配数量（非删除）
    int countAssignedByCouponId(@Param("couponId") Long couponId);

    // 级联：使用时递增模板已使用数量（守卫不超过总量）
    int incrementTemplateUsedQuantity(@Param("couponId") Long couponId);

    // 级联列表（联表查询三表返回字典）
    List<java.util.Map<String, Object>> selectUserCouponDetailList(UserCoupon userCoupon);
    // 根据用户ID查询级联详情列表
    List<java.util.Map<String, Object>> selectUserCouponDetailListByCustomerId(@Param("customerId") Long customerId);

    // 根据用户ID和优惠券状态查询级联详情列表
    List<java.util.Map<String, Object>> selectUserCouponDetailListByCustomerIdAndStatus(@Param("customerId") Long customerId, @Param("status") Integer status);

    // 根据用户ID和优惠券类型查询级联详情列表
    List<java.util.Map<String, Object>> selectUserCouponDetailListByCustomerIdAndType(@Param("customerId") Long customerId, @Param("type") Integer type);
}
